#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
任务完成率预测工具
这个脚本可以单独运行，用于预测特定条件下的任务完成率
"""

import os
import sys
import numpy as np
import pandas as pd
import tensorflow as tf
from sklearn.preprocessing import StandardScaler

def predict_completion_rate(day_of_week, is_holiday, planned_tasks):
    """
    预测给定条件下的任务完成率
    
    参数:
    day_of_week (int): 星期几 (1-7，1=周一，7=周日)
    is_holiday (int): 是否假日 (0=否，1=是)
    planned_tasks (int): 计划任务数量
    
    返回:
    float: 预测的完成率
    """
    # 检查模型是否存在
    if not os.path.exists('output/completion_rate_model'):
        print("错误：找不到模型文件。请先运行分析脚本生成模型。")
        return None
    
    # 加载模型
    try:
        model = tf.keras.models.load_model('output/completion_rate_model')
    except Exception as e:
        print(f"加载模型时出错：{e}")
        return None
    
    # 加载数据以获取标准化器
    try:
        data = pd.read_csv('data/completion_data.csv')
        X = data[['day_of_week', 'is_holiday', 'planned_tasks']]
        scaler = StandardScaler()
        scaler.fit(X)
    except Exception as e:
        print(f"加载数据时出错：{e}")
        return None
    
    # 创建输入数据
    input_data = np.array([[day_of_week, is_holiday, planned_tasks]])
    
    # 标准化输入数据
    input_data_scaled = scaler.transform(input_data)
    
    # 预测完成率
    predicted_rate = model.predict(input_data_scaled)[0][0]
    
    return predicted_rate

def main():
    """主函数"""
    print("\n" + "="*50)
    print("任务完成率预测工具")
    print("="*50)
    
    if len(sys.argv) == 4:
        # 从命令行参数获取输入
        try:
            day_of_week = int(sys.argv[1])
            is_holiday = int(sys.argv[2])
            planned_tasks = int(sys.argv[3])
        except ValueError:
            print("错误：参数必须是整数")
            print("用法：python predict_completion_rate.py <星期几(1-7)> <是否假日(0/1)> <计划任务数量>")
            return
    else:
        # 交互式获取输入
        try:
            day_of_week = int(input("星期几 (1-7，1=周一，7=周日): "))
            if day_of_week < 1 or day_of_week > 7:
                print("错误：星期几必须在1-7之间")
                return
            
            is_holiday = int(input("是否假日 (0=否，1=是): "))
            if is_holiday not in [0, 1]:
                print("错误：是否假日必须是0或1")
                return
            
            planned_tasks = int(input("计划任务数量: "))
            if planned_tasks < 1:
                print("错误：计划任务数量必须大于0")
                return
        except ValueError:
            print("错误：请输入有效的整数")
            return
    
    # 预测完成率
    predicted_rate = predict_completion_rate(day_of_week, is_holiday, planned_tasks)
    
    if predicted_rate is not None:
        print(f"\n预测结果：")
        print(f"星期{day_of_week}，{'是' if is_holiday else '不是'}假日，计划任务数量为{planned_tasks}")
        print(f"预测完成率: {predicted_rate:.4f} ({predicted_rate*100:.2f}%)")
        
        # 提供一些建议
        if predicted_rate < 0.8:
            print("\n建议：")
            if planned_tasks > 9:
                print("- 考虑减少计划任务数量，建议控制在7-9个任务")
            if day_of_week in [1, 6, 7]:
                print("- 在周一或周末，可能需要额外的专注度和动力")
            if is_holiday == 1:
                print("- 在假日期间，可以设置更明确的目标和奖励机制")

if __name__ == "__main__":
    main()